#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

#define flr(x,l,r) for (int x = l; x <= r; ++ x)
#define frl(x,r,l) for (int x = r; x >= l; -- x)
#define LL long long 
#define mt memset 
#define szf sizeof
#define in(x) scanf("%d", &x)
#define out(x) printf("%d", x)
#define inll(x) scanf("%lld", &x)
#define outll(x) printf("%lld", x)
#define pn printf("\n")
#define con continue
#define bk break
#define vc vector 
//#define pb push_back
#define sz size
#define PII pair<int, int>

using namespace std;

const int N = 100010, M = 100010, P = 110;

int n, m, p;
LL d[N], t[N], a[N], s[N];
LL f[P][M];
int q[M];

LL get_y(int k, int j) {
    return f[j - 1][k] + s[k];
}

int main() {
	in(n), in(m), in(p);
	
	flr (i, 2, n) inll(d[i]), d[i] += d[i - 1];
	
	flr (i, 1, m) {
	    int h;
	    in(h), inll(t[i]);
	    a[i] = t[i] - d[h];
	}
    
    sort(a + 1, a + m + 1);
    
    flr (i, 1, m) s[i] = s[i - 1] + a[i];
    
    mt(f, 0x3f, szf f);
    flr (i, 0, p) f[i][0] = 0;
    
    flr (j, 1, p) {
        int hh = 0, tt = 0;
        
        flr (i, 1, m) {
            while (hh < tt && (get_y(q[hh + 1], j) - get_y(q[hh], j)) <= a[i] * (q[hh + 1] - q[hh])) hh ++ ;
            int k = q[hh];
            f[j][i] = f[j - 1][k] - a[i] * k + s[k] + a[i] * i - s[i];
            while (hh < tt && (get_y(q[tt], j) - get_y(q[tt - 1], j)) * (i - q[tt]) >=
                (get_y(i, j) - get_y(q[tt], j)) * (q[tt] - q[tt - 1])) tt -- ;
            q[ ++ tt] = i;
        }
    }
    
    outll(f[p][m]), pn;
    
	return 0;
}